package main

import "fmt"

/*
简易的ATM存取款系统
定义一些初始值
username="root"
passwd="123456"
balance=1000
实现一个简易的atm存取款系统
1.登录成功才能进入系统

	选择：
	 1.存钱
	 2.取钱---注意不能大于余额
	 3.查询余额
	 4.退出整个系统

2.登录失败有三次重试机会
把功能都封装成函数
*/
var username = "root"
var passwd = "123456"
var balance = 1000
var precentsaved = 0
var ecount = 2

func main() {
	var username0 string
	var passwd0 string
label:
	fmt.Println("请输入用户名：")
	fmt.Scan(&username0)
	fmt.Println("请输入密码：")
	fmt.Scan(&passwd0)
	fmt.Print("\n")
	if login(username0, passwd0) { //调用登录函数
		var select0 = 0
		for select0 != 4 {
			printsys() //调用选择指南显示函数
			fmt.Scan(&select0)
			selectsys(select0) //调用 选择功能并且执行功能函数 函数
		}
	} else {
		var returnresult = loginrooser(&ecount) //调用登录失败函数
		if returnresult {
			goto label //登录失败有三次机会，goto最开始登录页面
		}
		exit() //登录失败三次调用退出函数
	}
}

// 登录功能函数
func login(username, passwd string) bool {
	if username == "root" && passwd == "123456" {
		return true
	}
	return false
}

// 存钱功能函数
func save(willsaving int) {
	precentsaved = willsaving + precentsaved
	fmt.Printf("已成功存入%d元，余额%d元", willsaving, precentsaved)
	fmt.Println("\n")
}

// 取钱功能函数
func withdraw(willwithdraw int) {
	//if willwithdraw > precentsaved || willwithdraw > 1000 {
	//}
	if willwithdraw > precentsaved || precentsaved <= 0 {
		fmt.Println("余额不足！")
		fmt.Println("\n")
	} else if willwithdraw > balance {
		fmt.Println("操作失败！单次取款不能超过1000元！")
		fmt.Println("\n")
	} else {
		precentsaved = precentsaved - willwithdraw
		fmt.Printf("已成功取出%d元，余额%d元", willwithdraw, precentsaved)
		fmt.Println("\n")
	}

}

// 查看余额函数
func lookpresave() {
	fmt.Printf("当前余额为：%d元", precentsaved)
	fmt.Println("\n")
}

// 退出函数
func exit() bool {
	fmt.Println("已退出系统！")
	return false
}

// 显示选择指南函数，方便用户使用和测试体验
func printsys() {
	fmt.Println("***操作指南***")
	fmt.Println("1.存钱")
	fmt.Println("2.取钱")
	fmt.Println("3.查余额")
	fmt.Println("4.退出系统")
	fmt.Println("请输入你的选择（1、2、3、4）：")
}

// 选择（存钱，取钱，查看余额，退出）功能函数，并且调用该功能函数的函数
func selectsys(selectint int) {
	switch selectint {
	case 1:
		var willsave0 int
		fmt.Println("请输入存款金额：")
		fmt.Scan(&willsave0)
		save(willsave0)
	case 2:
		var willwithdraw0 int
		fmt.Println("请输入取款金额：")
		fmt.Scan(&willwithdraw0)
		withdraw(willwithdraw0)
	case 3:
		lookpresave()
	case 4:
		exit()

	}
}

// 登录失败函数
func loginrooser(ecount *int) bool {
	if *ecount > 0 {
		fmt.Printf("用户名或者密码输入有误,还有%d次机会！！", *ecount)
		*ecount = *ecount - 1
		fmt.Print("\n")
		return true
	} else {
		return false
	}
}
